package cz.pecinovsky.česky.oopnz._125_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

import cz.pecinovsky.česky.oopnz.správce.Elipsa;
import cz.pecinovsky.česky.oopnz.správce.Kompresor;
import cz.pecinovsky.česky.oopnz.správce.Mnohotvar;
import cz.pecinovsky.česky.oopnz.správce.Obdélník;
import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;
import cz.pecinovsky.česky.oopnz.správce.Trojúhelník;

import java.lang.reflect.Method;

import static cz.pecinovsky.česky.oopnz._125_.TestUtility_129_133.TestUtility;


////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%I+ =133c
//
//import město.TestUtility;
//%I-
//%I+ >=133x
//
//import cz.pecinovsky.česky.oopnz.město.TestUtility;
//
//import cz.pecinovsky.česky.oopnz.správceplátna.Elipsa;
//import cz.pecinovsky.česky.oopnz.správceplátna.Kompresor;
//import cz.pecinovsky.česky.oopnz.správceplátna.Mnohotvar;
//import cz.pecinovsky.česky.oopnz.správceplátna.Obdélník;
//import cz.pecinovsky.česky.oopnz.správceplátna.Přesouvač;
//import cz.pecinovsky.česky.oopnz.správceplátna.SprávcePlátna;
//import cz.pecinovsky.česky.oopnz.správceplátna.Trojúhelník;
//%I-
//%A+ >=133x

import cz.pecinovsky.česky.oopnz.utility.IO;
import cz.pecinovsky.česky.oopnz.utility.Směr8;
//%A-
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí: _111zMnohotvarTest
 *
 * Přidáno:
 *    - testPlynuléPosuny
 *    - testKompresi
 *
 * Upraveno:
 *      *
 *</pre>
 */
public class MnohotvarTest_129_
{    private MnohotvarTest_129_() {}   static
//%X- ----- Konec přeskakovaného textu -----
//%I+ =133c
//
//import město.TestUtility;
//%I-


/*******************************************************************************
 * Testovací třída {@code MnohotvarTest} slouží
 * ke komplexnímu otestování třídy {@link MnohotvarTest}.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class MnohotvarTest extends junit.framework.TestCase
{
    private SprávcePlátna SP;

    private Mnohotvar m1;
    private Mnohotvar m2;

    private Přesouvač přes;



//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public MnohotvarTest( String název )
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Inicializace předcházející spuštění každého testu a připravující tzv.
     * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat.
     */
    @Override
    protected void setUp()
    {
        SP = SprávcePlátna.getInstance();
        m1 = new Mnohotvar("m1", new Obdélník(), new Elipsa(), new Trojúhelník());
        m2 = new Mnohotvar("m2");
        SP.přidej(m1);
        m2.přidej(m1);
        SP.přidej(m2);
        m1.setRozměr(33, 25);
        m1.setPozice(33, 25);
        m2.přidej(m1);
        m2.hotovo();
        přes = new Přesouvač(5);
        přes.přesunNa(150, 0, m1);
        IO.zpráva("Mnohotvary připraveny");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
//%X+
        vyčisti();
//%X-
    }


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//%X+

    /***************************************************************************
     * Metoda přesvědčí třídu {@link Mnohotvar}, aby zapomněla na všechny
     * vytvořené mnohotvary.
     * Metoda slouží pouze pro účely testování, aby nebylo nutno dohlížet na to,
     * že se názvy novotvarů vytvořených  pro další test budou lišit
     * od názvů vytvořených pro minulý test.
     * Její použití v běžném programu je nebezpečné, protože by umožnilo
     * vznik dvou stejně pojmenovaných monohotvarů.
     */
    private static void vyčisti()
    {
        Mnohotvar.Test.odregistrujVše();
    }



//%X-
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }
//

    public void testPlynuléPřesuny()
    {
        Přesouvač přesouvač = new Přesouvač(10);
        přesouvač.přesunO (100,   0, m1);
        přesouvač.přesunNa(100, 100, m2);
    }


    public void testKomprese()
    {
        Kompresor kompresor = new Kompresor(10);
        kompresor.nafoukniNa(300, 300, m2);
        kompresor.nafoukniKrát(0.5, m2, Směr8.VÝCHOD);
        kompresor.nafoukniO(50, -50, m2, null);
    }


    public void testProhoďPoziceSKontrolou()
    {
        TestUtility.prohoďPoziceSKontrolou(m1, m2);
    }

}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
//%== //Takto se označí řádek, jenž bude odkomentován (vhodné např. pro importy)
//Je-li na 6 pozici mezera, odmaže se také

//== TESTY A METODA MAIN =======================================================

    /***************************************************************************
     * Suita pro spuštění JUnit testů
     * @return
     */
    public static junit.framework.Test suite()
    {
        junit.framework.TestSuite suite = new junit.framework.TestSuite();

        //Mají-li být do sady přidány všechny testy této třídy
        //suite.addTestSuite( Třída.class );

        //Jsou-li přidávané testy definovány v sadě zadané třídy
        //suite.addTest( Třída.suite() );

        //Má-li být do sady přidán jeden konkrétní test konkrétní třídy
        //suite.addTest( new Třída("testXXX") );

        return suite;
    }


    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
            SprávcePlátna.getInstance().odstraňVše();
            MnohotvarTest.vyčisti();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Run.tests(MnohotvarTest.class,
                new TearDown(),
                "testPlynuléPřesuny",
                "testKomprese",
                "testProhoďPoziceSKontrolou",
                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
